export let optionsP = reactive({
  sTimes: [] as any,
  eTimes: [] as any,
});

for (let i = 0; i < 49; i++) {
  let a = 1;
  let b = 0;
  a = Math.floor(i / 2);
  const aa = a > 9 ? a.toString() : `0${a}`;
  b = (i % 2) * 30;
  const bb = b === 30 ? b.toString() : `${b}0`;
  if (i !== 0) {
    optionsP.eTimes.push({
      value: String(i),
      label: `${aa}:${bb}`,
      disabled: false,
    });
  }
  if (i !== 48) {
    optionsP.sTimes.push({
      value: String(i),
      label: `${aa}:${bb}`,
      disabled: false,
    });
  }
}

// 开始时间下拉是重置下拉数据
export const visibleChangeStart = (e: any, index: number, form: any) => {
  if (e) {
    let arr = [] as any; // 不能选的值
    const et = form.data[index].endTime;
    // 如有其他行数据，开始时间不能在其他行的时间区间里，将这些时间区间值，放数组里
    let min = 0; // 求结束时间前的时间段结束时间
    form?.data.forEach((item: any, inx: number) => {
      // if (inx !== index && item.startTime && item.endTime) {
      //   const stt = Number(item.startTime);
      //   const ett = Number(item.endTime);
      //   if (Number(et) > min && Number(et) > stt) {
      //     min = stt;
      //   }
      //   for (let i = stt; i < ett; i++) {
      //     if (!arr.includes(i)) {
      //       arr.push(String(i));
      //     }
      //   }
      // }
      if (inx !== index) {
        if (item.startTime && item.endTime) {
          const stt = Number(item.startTime);
          const ett = Number(item.endTime);
          if (Number(et) > min && Number(et) > stt) {
            min = stt;
          }
          for (let i = stt; i < ett; i++) {
            if (!arr.includes(i)) {
              arr.push(String(i));
            }
          }
        } else if (item.startTime) {
          const stt = Number(item.startTime);
          for (let i = stt; i < 48; i++) {
            if (!arr.includes(i)) {
              arr.push(String(i));
            }
          }
        } else if (item.endTime) {
          const ett = Number(item.endTime);
          for (let i = ett; i < 48; i++) {
            if (!arr.includes(i)) {
              arr.push(String(i));
            }
          }
        }
      }
    });
    // 如有结束时间
    if (et) {
      // 结束时间之后的不能选
      for (let i = Number(et); i < 48; i++) {
        arr.push(String(i));
      }
      // 如果前面时间段，前面面第一个时间段结束时间之前不能选
      if (Number(et) > min) {
        for (let i = 0; i < min; i++) {
          arr.push(String(i));
        }
      }
    }

    // 遍历下拉数据，将不能选的值的disabled设为true，其他设为false
    optionsP.sTimes.forEach((item: any) => {
      item.disabled = arr.includes(item.value);
    });
  }
};

// 结束时间下拉是重置下拉数据
export const visibleChangeEnd = (e: any, index: number, form: any) => {
  if (e) {
    let arr = [] as any; // 不能选的值
    const st = form.data[index].startTime;
    // 如有其他行数据，开始时间不能在其他行的时间区间里，将这些时间区间值，放数组里
    let min = 48; // 求开始时间后的时间段开始时间
    form?.data.forEach((item: any, inx: number) => {
      // if (inx !== index && item.startTime && item.endTime) {
      //   const stt = Number(item.startTime);
      //   const ett = Number(item.endTime);
      //   if (Number(st) < min && Number(st) < stt) {
      //     min = stt;
      //   }
      //   for (let i = stt + 1; i < ett + 1; i++) {
      //     if (!arr.includes(i)) {
      //       arr.push(String(i));
      //     }
      //   }
      // }
      if (inx !== index) {
        if (item.startTime && item.endTime) {
          const stt = Number(item.startTime);
          const ett = Number(item.endTime);
          if (Number(stt) < min && Number(st) < stt) {
            min = stt;
            console.log('mm---11---', min)
          }
          for (let i = stt + 1; i < ett + 1; i++) {
            if (!arr.includes(i)) {
              arr.push(String(i));
            }
          }
        } else if (item.startTime) {
          const stt = Number(item.startTime);
          for (let i = stt + 1; i < 49; i++) {
            if (!arr.includes(i)) {
              arr.push(String(i));
            }
          }
        } else if (item.endTime) {
          const ett = Number(item.endTime);
          for (let i = ett; i < 49; i++) {
            if (!arr.includes(i)) {
              arr.push(String(i));
            }
          }
        }
      }
    });
    // 如有开始时间
    if (st) {
      // 开始时间之前的不能选
      for (let i = 0; i < Number(st) + 1; i++) {
        arr.push(String(i));
      }
      console.log('mm------', min)
      // 如果开始时间后面有时间段，后面第一个时间段开始时间之后不能选
      if (Number(st) < min) {
        for (let i = min + 1; i < 49; i++) {
          arr.push(String(i));
        }
      }
    }
    // 遍历下拉数据，将不能选的值的disabled设为true，其他设为false
    optionsP.eTimes.forEach((item: any) => {
      item.disabled = arr.includes(item.value);
    });
  }
};

const getObj = (time: any, type: any, flag?: boolean) => {
  let obj = {} as any;
  obj = {
    time: `${time.startTimeStr}~${time.endTimeStr}`,
    pricePower: type.pricePower.toFixed(4),
    priceService: type.priceService.toFixed(4),
  };
  if (flag) {
    obj.id = time.startTime;
  }
  return obj;
};
// 根据后端价格数据，生成前端需要展示的价格列表
export const getPriceList = (res: any) => {
  let arr = [] as any;
  if (res.protocolVersion === '1') {
    arr = getUdp(res.costTemplateUdpList);
  } else if (res.protocolVersion === '100') {
    arr = getTcp(
      res.costTemplateTcpPriceSetList,
      res.costTemplateTcpPriceTypeList
    );
  }
  return arr;
};

export const getUdp = (list: any) => {
  let arr = [] as any;
  list?.forEach((item: any) => {
    arr.push(getObj(item, item));
  });
  return arr;
};

export const getTcp = (sets: any, types: any) => {
  let arr = [] as any;
  const time = sets.find((it: any) => it.isTimeRemaining);
  if (time) {
    // 有剩余时段
    let timeArr = [] as any;
    let otherArr = [] as any; // 剩余时段数据
    const plist = sets || [];
    plist?.forEach((item: any) => {
      const type = types?.find((it: any) => it.id === item.priceTypeId);
      if (!item.isTimeRemaining) {
        timeArr.push(getObj(item, type, true));
      } else {
        const arrId = item.endTimeStr.split(',');
        const arrStr = item.startTimeStr.split(',');
        arrId.forEach((it: any, inx: number) => {
          const arrIt = it.split('~');
          if (arrIt[0] != arrIt[1]) {
            otherArr.push({
              id: Number(arrIt[0]),
              time: arrStr[inx],
              pricePower: type.pricePower.toFixed(4),
              priceService: type.priceService.toFixed(4),
            })
          }
        })
      }
    });
    arr = [...timeArr, ...otherArr].sort((a: any, b: any) => a.id - b.id);
  } else {
    // 没有剩余时段
    sets.forEach((item: any) => {
      const type = types?.find((it: any) => it.id === item.priceTypeId);
      arr.push(getObj(item, type));
    });
  }
  return arr;
};
